package com.atguigu.lease.web.admin.custom.converter;

import com.atguigu.lease.model.enums.BaseEnum;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
/***
 *这个接口可以帮我们实现一类的转换，比如我们想把String转换成BaseEnum的实现类，而不是单独某一个枚举的实现类
 */
@Configuration
public class StringToBaseEnumConverterFactory implements ConverterFactory<String, BaseEnum> {
    @Override
    public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {

        //定义一个转换器
        // 定义一个匿名内部类实现Converter接口，在里面写转换的逻辑
        //这里的source就是前端传过来的值，targetType就是我们想要转换成的枚举类的类型
        Converter converter = (source)->{
            //还是获取枚举类的全部枚举值
            T[] enumConstants = targetType.getEnumConstants();
            //遍历枚举值
            if (enumConstants != null && enumConstants.length >0){
                for (T enumConstant : enumConstants) {
                    //如果枚举的code和前端传过来的值相等，那么就返回这个枚举
                    if (source.equals(String.valueOf(enumConstant.getCode()))){
                        return enumConstant;
                    }
                }
            }
            return null;
        };
        return converter;
    }
}
